Shadow in React Native 原來有這門學問。
在專案中,遇到卡牌的陰影問題,以為可以使用 css3 中的 box-shadow 屬性,結果發現設定後,沒效果啊~!接著又發現雙平台的顯示竟然沒有統一,所以31天接續紀錄一下,就是寫這篇的原因了~ :P
首先你要先知道,react native 有個很平易近人的跨平台裝置判斷,請看下面這篇:
[ 卡卡 DAY 8 ] - React Native 跨平台裝置判斷
當學會判斷平台之後...,以下就知道是怎麼一回事了
import {
  StyleSheet,
  Platform
} from 'react-native';
const styles = StyleSheet.create({
  cardShadow: {
    ...Platform.select({
      ios: {
        // ios style
      },
      android: {
        // android style
      }
    })
  },
});
    shadowColor: '#aaa',  
    // 陰影的顏色
    shadowOffset:{width:0,height:0},  
    // xy軸為基準,設定陰影的偏移,width = x軸,height = y軸
    shadowOpacity: 1,
    // 陰影的透明度
    shadowRadius: 1.5,  
    // 設置陰影暈染半徑
    elevation:1.5,
    // 支援 android5.0 以上
    // 無法指定陰影的顏色以及偏移,只能設陰影高度,陰影效果主要在底部
    // elevation 是只有 Android-only style property 使用在 View elements
import {
  StyleSheet,
  Platform
} from 'react-native';
//.....code....//
const styles = StyleSheet.create({
  cardShadow: {
    ...Platform.select({
      ios: {
        shadowColor: '#aaa',  
        shadowOffset:{width:0,height:0},  
        shadowOpacity: 1,
        shadowRadius: 1.5,  
      },
      android: {
         elevation:1.5,
      }
    })
  },
});
結果...你會發現,其實兩個裝置的樣式寫法根本就不一樣,所以不需要做平台判斷直接合併寫即可。
import {
  StyleSheet
} from 'react-native';
//.....code....//
const styles = StyleSheet.create({
  cardShadow: {
    shadowColor: '#aaa',  
    shadowOffset:{width:0,height:0},  
    shadowOpacity: 1,
    shadowRadius: 1.5,  
    elevation:1.5,
  },
});